Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(sqlparser): array of struct of struct #19483

Merged
merged 2 commits into from
Nov 22, 2024
Merged

Conversation

xiangjinwu
Copy link
Contributor

@xiangjinwu xiangjinwu commented Nov 20, 2024

I hereby agree to the terms of the RisingWave Labs, Inc. Contributor License Agreement.

What's changed and what's your intention?

When parsing >>[], whose token stream contains [ShiftRight, LBracket, RBracket], the parser first consumes ShiftRight and sets internal state remaining_close = true. At this stage, it shall consider the next token as effectively Gt rather than peeking at LBracket from the stream. In the latter case it would be wrongly parsed as >[]>

dot

Limitations:

  • Ideally all places peeking from stream need to check remaining_close first as if it was the next token. But I cannot find a good way to ensure such a virtual stream is followed (mutating input stream is not an option as it breaks backtrack and location reporting). The current fix only applies to array syntax [] as suffix. Hopefully no future syntax extensions hit the same problem.

Checklist

  • I have written necessary rustdoc comments
  • I have added necessary unit tests and integration tests
  • I have added test labels as necessary. See details.
  • I have added fuzzing tests or opened an issue to track them. (Optional, recommended for new SQL features Sqlsmith: Sql feature generation #7934).
  • My PR contains breaking changes. (If it deprecates some features, please create a tracking issue to remove them in the future).
  • All checks passed in ./risedev check (or alias, ./risedev c)
  • My PR changes performance-critical code. (Please run macro/micro-benchmarks and show the results.)
  • My PR contains critical fixes that are necessary to be merged into the latest release. (Please check out the details)

Documentation

  • My PR needs documentation updates. (Please use the Release note section below to summarize the impact on users)

Release note

If this PR includes changes that directly affect users or other significant modifications relevant to the community, kindly draft a release note to provide a concise summary of these changes. Please prioritize highlighting the impact these changes will have on users.

@github-actions github-actions bot added the type/fix Bug fix label Nov 20, 2024
@@ -74,3 +74,6 @@
sql parser error: expected an expression, found: [
LINE 1: SELECT [1,2]
^
- input: CREATE TABLE t (params STRUCT<a STRUCT<b int>>[])
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test case seems to work in current version. Did I miss something?

dev=> CREATE TABLE t (params STRUCT<a STRUCT<b int>>[])
dev-> ;
CREATE_TABLE
dev=> describe t;
┌───────────────────┬─────────────────────┬───────────┬─────────────┐
│       Name        │        Type         │ Is Hidden │ Description │
├───────────────────┼─────────────────────┼───────────┼─────────────┤
│ params            │                     │ false     │ ∅           │
│ params.a          │ struct<b integer>[] │ false     │ ∅           │
│ _row_id           │ serial              │ true      │ ∅           │
│ primary key       │ _row_id             │ ∅         │ ∅           │
│ distribution key  │ _row_id             │ ∅         │ ∅           │
│ table description │ t                   │ ∅         │ ∅           │
└───────────────────┴─────────────────────┴───────────┴─────────────┘
(6 rows)

Copy link
Member

@xxchan xxchan Nov 21, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, it's wrong

dev=> show create table t;
┌──────────┬───────────────────────────────────────────────────┐
│   Name   │                    Create Sql                     │
├──────────┼───────────────────────────────────────────────────┤
│ public.t │ CREATE TABLE t (params STRUCT<a STRUCT<b INT>[]>) │
└──────────┴───────────────────────────────────────────────────┘

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How did you find the bug? Is it related with other bugs?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See the linked issue. It was causing a schema mismatch panic when sink into table.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I didn't notice there's linked issue since there's no fix #xx in body 😄

Copy link
Contributor

@TennyZhuang TennyZhuang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Member

@xxchan xxchan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM for the fix. But agree that not sure whether it's universal.

@xxchan
Copy link
Member

xxchan commented Nov 21, 2024

dot

Curious how did you generated this graph and what did you use it for? 👀

@xiangjinwu
Copy link
Contributor Author

dot

Curious how did you generated this graph and what did you use it for? 👀

  • Generated manually ...
  • Used it to understand the indirect recursion, specially how parsing of >>[] became >[]>.

@xiangjinwu xiangjinwu added this pull request to the merge queue Nov 22, 2024
Merged via the queue into main with commit ca5f13a Nov 22, 2024
42 of 43 checks passed
@xiangjinwu xiangjinwu deleted the fix-sqlparser-array-struct branch November 22, 2024 03:43
github-merge-queue bot pushed a commit that referenced this pull request Nov 22, 2024
github-merge-queue bot pushed a commit that referenced this pull request Nov 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

bug: panic on schema mismatch when sink into table with array of struct
4 participants